package TCP;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.net.InetAddress;
import java.net.Socket;

/**
 * 日测试07 - GUI聊天客户端测试类
 * 该类用于创建一个简单的图形用户界面（GUI）聊天客户端测试。
 */
public class Day07_GUIChatClient_Test {
    public static void main(String[] args) {
        // 创建Jack类的实例，即启动客户端界面
        Jack jack = new Jack();

    }
}

/**
 * Jack类 - 继承自JFrame，构成客户端主窗口
 * 该类定义了客户端图形用户界面的主要组件和布局。
 */
class Jack extends JFrame implements ActionListener {
    // 文本区域，用于显示聊天信息
    JTextArea jTextArea;
    // 文本字段，用于用户输入聊天信息
    JTextField jtextField;
    // 按钮，用于发送聊天信息
    JButton button;
    //文本输出流
    PrintWriter printWriter;
    JScrollPane jScrollPane;

    /**
     * Jack类构造函数，初始化客户端GUI界面
     * 该函数设置窗口的基本属性，如位置、大小、标题，并初始化主要组件。
     */
    public Jack() {
        // 创建并添加标签到窗口，显示区域说明
        JLabel jlabel = new JLabel("这是显示区域：");
        jlabel.setBounds(50, 20, 100, 50);
        add(jlabel);

        // 设置窗口布局为null，以便手动定位和大小调整组件
        setLayout(null);

        // 初始化并设置文本区域，用于显示聊天记录
        jTextArea = new JTextArea();

        //给jTextArea设置滚动条
        jScrollPane = new JScrollPane(jTextArea);
        jScrollPane.setBounds(100, 100, 200, 100);
        add(jScrollPane);
        jScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        // 设置文本区域为只读，防止用户编辑显示的聊天信息
        jTextArea.setEditable(false);
        /*================================================*/
        jtextField = new JTextField();
        jtextField.setBounds(100, 250, 200, 50);
        add(jtextField);

        button = new JButton("发送");
        button.setBounds(330, 250, 100, 50);
        add(button);
        button.addActionListener(this);//添加监听器

        // 初始化窗口属性
        setVisible(true);
        setBounds(100, 100, 500, 500);
        setTitle("客户端");
        setResizable(false);


        try {
            InetAddress addr = InetAddress.getLocalHost();
            Socket socket = new Socket(addr, 8888);
            jTextArea.append("已经连接上服务器了\n");
            //从客户端发送数据到服务器
            OutputStream outputStream = socket.getOutputStream();
            DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
            printWriter = new PrintWriter(dataOutputStream, true);


        } catch (IOException e) {
            throw new RuntimeException(e);
        }


    }

    public void actionPerformed(ActionEvent evt) {
        //找到触发事件的组件
        if (evt.getSource() == button) {
            // 获取输入的字符串

            try {
                String str = jtextField.getText().toString();//强制转换成字符串
                printWriter = new PrintWriter(str);
                jTextArea.append("客户端发送的内容：" + str + "\n");//添加到文本区域
            } catch (FileNotFoundException e) {
                throw new RuntimeException(e);
            }


        }
    }

}
